home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / machserver / 1.098 / lfs / lfsStableMemInt.h < prev    next >
C/C++ Source or Header  |  1991-08-08  |  4KB  |  96 lines

  1. /*
  2.  * lfsStableMemInt.h --
  3.  *
  4.  *    Declarations of kernel routines implementing the LFS stable memory
  5.  *    abstraction. The stable memory abstraction provides access a
  6.  *    collection of fixed size "entries" numbered consecutively from zero.
  7.  *    
  8.  *
  9.  * Copyright 1990 Regents of the University of California
  10.  * Permission to use, copy, modify, and distribute this
  11.  * software and its documentation for any purpose and without
  12.  * fee is hereby granted, provided that the above copyright
  13.  * notice appear in all copies.  The University of California
  14.  * makes no representations about the suitability of this
  15.  * software for any purpose.  It is provided "as is" without
  16.  * express or implied warranty.
  17.  *
  18.  * $Header: /sprite/src/kernel/lfs/RCS/lfsStableMemInt.h,v 1.3 91/08/08 17:51:42 mendel Exp $ SPRITE (Berkeley)
  19.  */
  20.  
  21. #ifndef _LFSSTABLEMEMINT
  22. #define _LFSSTABLEMEMINT
  23.  
  24. #include <lfsInt.h>
  25. #include <lfsStableMem.h>
  26. #include <fsioFile.h>
  27. #include <lfsSeg.h>
  28.  
  29. /* constants */
  30.  
  31. /*
  32.  * Flags for LfsStableMemFetch. 
  33.  * LFS_STABLE_MEM_MAY_DIRTY    - Fetcher may change element.
  34.  * LFS_STABLE_MEM_REL_ENTRY     - The pasted entry should be released.
  35.  */
  36.  
  37. #define    LFS_STABLE_MEM_MAY_DIRTY 1
  38. #define    LFS_STABLE_MEM_REL_ENTRY 2
  39.  
  40. /* data structures */
  41. typedef struct LfsStableMem {
  42.     struct Lfs          *lfsPtr;        /* File system for stable memory. */
  43.     Fsio_FileIOHandle dataHandle;    /* Handle used to store blocks in
  44.                      * cache under. */
  45.     LfsDiskAddr    *blockIndexPtr;     /* Index of current disk addresses. */
  46.     int        numCacheBlocksOut;    /* The number of cache blocks currently
  47.                      * fetched by the backend. */
  48.     LfsStableMemCheckPoint checkPoint; /* Data to be checkpoint. */
  49.     LfsStableMemParams params;  /* A copy of the parameters of the index. */
  50. } LfsStableMem;
  51.  
  52. typedef struct LfsStableMemEntry {
  53.     Address    addr;            /* Memory address of entry. */
  54.     Boolean    modified;        /* TRUE if the entry has been 
  55.                      * modified. */
  56.     int        blockNum;        /* Block number of entry. */
  57.     ClientData    clientData;        /* Clientdata maintained by 
  58.                      * StableMem code. */
  59. } LfsStableMemEntry;
  60.  
  61. /*
  62.  * Macro for accessing elements of LfsStableMemEntry.
  63.  * LfsStableMemEntryAddr - Return the memory address of an entry.
  64.  * LfsStableMemMarkDirty - Mark an entry has modified.
  65.  */
  66.  
  67. #define    LfsStableMemEntryAddr(entryPtr)    ((entryPtr)->addr)
  68. #define    LfsStableMemMarkDirty(entryPtr)    ((entryPtr)->modified = TRUE)
  69.  
  70. /* procedures */
  71.  
  72. extern ReturnStatus LfsStableMemLoad _ARGS_((struct Lfs *lfsPtr, 
  73.         LfsStableMemParams *smemParamsPtr, int checkPointSize, 
  74.         char *checkPointPtr, LfsStableMem *smemPtr));
  75. extern Boolean LfsStableMemClean _ARGS_((struct LfsSeg *segPtr, int *sizePtr, 
  76.         int *numCacheBlocksPtr, ClientData *clientDataPtr, 
  77.         LfsStableMem *smemPtr));
  78. extern Boolean LfsStableMemCheckpoint _ARGS_((struct LfsSeg *segPtr, 
  79.         char *checkPointPtr, int flags, int *checkPointSizePtr, 
  80.         ClientData *clientDataPtr, LfsStableMem *smemPtr));
  81. extern Boolean LfsStableMemLayout _ARGS_((struct LfsSeg *segPtr, int flags,
  82.         ClientData *clientDataPtr, LfsStableMem *smemPtr));
  83. extern void LfsStableMemWriteDone _ARGS_((struct LfsSeg *segPtr, int flags, 
  84.         ClientData *clientDataPtr, LfsStableMem *smemPtr));
  85. extern ReturnStatus LfsStableMemFetch _ARGS_((LfsStableMem *smemPtr, 
  86.         int entryNumber, int flags, 
  87.         LfsStableMemEntry *entryPtr));
  88. extern void LfsStableMemRelease _ARGS_((LfsStableMem *smemPtr, 
  89.         LfsStableMemEntry *entryPtr, Boolean modified));
  90.  
  91. extern ReturnStatus LfsStableMemDestory _ARGS_((struct Lfs *lfsPtr, 
  92.                         LfsStableMem *smemPtr));
  93.  
  94. #endif /* _LFSSTABLEMEMINT */
  95.  
  96.